{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "<div><img src = \"http://dolphin-public.oss-cn-shanghai.aliyuncs.com/img/marry/ml/1508.png\", width = 750/>"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 参数"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:06:52.405451Z",
     "start_time": "2019-12-24T17:06:52.397439Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 函数输出打分\n",
    "output_score = list(range(12))\n",
    "output_score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:07:25.621810Z",
     "start_time": "2019-12-24T17:07:25.615857Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "12"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 正确分类\n",
    "y = [0, 0, 0, 0, 1, 0, 1, 1, 0, 1, 1, 1]\n",
    "len(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:07:42.627291Z",
     "start_time": "2019-12-24T17:07:42.617320Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0]"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 设定p，集合中正例比例，这里范围为0-100，所以还要除以100\n",
    "p = list(range(0,101,10))\n",
    "p = [i/100 for i in p]\n",
    "p"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:08:05.542158Z",
     "start_time": "2019-12-24T17:08:05.539160Z"
    }
   },
   "outputs": [],
   "source": [
    "# 设定代价\n",
    "c01 = 3\n",
    "c02 = 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 一个阈值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:08:38.929168Z",
     "start_time": "2019-12-24T17:08:38.925179Z"
    }
   },
   "outputs": [],
   "source": [
    "# 判断阈值\n",
    "theta = 6.5"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:10:09.890941Z",
     "start_time": "2019-12-24T17:10:09.878973Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1]"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 函数输出判断\n",
    "def calculate_output_result(output_score,theta):\n",
    "    output_result = []\n",
    "    for i in range(len(output_score)):\n",
    "        if output_score[i] < theta:\n",
    "            output_result.append(0)\n",
    "        else:\n",
    "            output_result.append(1)\n",
    "    return output_result \n",
    "output_result = calculate_output_result(output_score,theta)\n",
    "output_result"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:11:17.181155Z",
     "start_time": "2019-12-24T17:11:16.456584Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6 6\n"
     ]
    }
   ],
   "source": [
    "# 统计正例和反例的个数\n",
    "import pandas as pd\n",
    "def calculate_m_positive_negative(y):\n",
    "    result = pd.value_counts(y)\n",
    "    m_positive = result[1]\n",
    "    m_negative = result[0]\n",
    "    return m_positive, m_negative\n",
    "m_positive, m_negative = calculate_m_positive_negative(y)\n",
    "print(m_positive, m_negative)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "|类型|预测为5|预测非5|\n",
    "|----|----|----|\n",
    "|m_positive=6|con1|con2|\n",
    "|m_negative=6|con3|con4|\n",
    "|m=12|-|-|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:12:41.287446Z",
     "start_time": "2019-12-24T17:12:41.278465Z"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4 2 1 5\n"
     ]
    }
   ],
   "source": [
    "# 计算混淆矩阵的圈1，圈2，圈3，圈4\n",
    "def calculate_confusion(y,output_result):\n",
    "    con1 = 0\n",
    "    con2 = 0\n",
    "    con3 = 0\n",
    "    con4 = 0\n",
    "    for i in range(len(y)):\n",
    "        if y [i] == 1:\n",
    "            if y[i] == output_result[i]:\n",
    "                con1 += 1\n",
    "            else:\n",
    "                con2 += 1\n",
    "        else:\n",
    "            if y[i] == output_result[i]:\n",
    "                con4 += 1\n",
    "            else:\n",
    "                con3 += 1\n",
    "    return con1, con2, con3, con4\n",
    "con1, con2, con3, con4 = calculate_confusion(y,output_result)\n",
    "print(con1, con2, con3, con4)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "\n",
    "|类型|预测为5|预测非5|\n",
    "|----|----|----|\n",
    "|m_positive=6|con1=4|con2=2|\n",
    "|m_negative=6|con3=1|con4=5|\n",
    "|m=12|-|-|"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:13:05.642768Z",
     "start_time": "2019-12-24T17:13:05.637783Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.3333 0.1667\n"
     ]
    }
   ],
   "source": [
    "# 求几个比例，保留四位小数\n",
    "def calculate_FNR_FPR(con1,con2,con3,con4):\n",
    "    FNR = round(con2/(con1+con2), 4)\n",
    "    FPR = round(con3/(con3+con4),4)\n",
    "    return FNR, FPR\n",
    "FNR, FPR = calculate_FNR_FPR(con1,con2,con3,con4)\n",
    "print(FNR, FPR)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:13:56.497970Z",
     "start_time": "2019-12-24T17:13:56.489015Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.0, 0.1429, 0.2727, 0.3913, 0.5, 0.6, 0.6923, 0.7778, 0.8571, 0.931, 1.0]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 正概率代价\n",
    "def calculate_Pcost(p, c01, c02):\n",
    "    Pcosts = []\n",
    "    for i in range(len(p)):\n",
    "        Pcost = round((p[i]*c01)/(p[i]*c01+(1-p[i])*c02),4)\n",
    "        Pcosts.append(Pcost)\n",
    "    return Pcosts\n",
    "Pcosts  = calculate_Pcost(p, c01, c02)\n",
    "Pcosts"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:14:52.986838Z",
     "start_time": "2019-12-24T17:14:52.975868Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.1667,\n",
       " 0.1905,\n",
       " 0.2121,\n",
       " 0.2319,\n",
       " 0.25,\n",
       " 0.2667,\n",
       " 0.282,\n",
       " 0.2963,\n",
       " 0.3095,\n",
       " 0.3218,\n",
       " 0.3333]"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 归一化总概率\n",
    "def calculate_cost_norm(p, c01, c02, FNR, FPR):\n",
    "    costs_norm = []\n",
    "    for i in range(len(p)):\n",
    "        cost_norm = round((FNR*(p[i]*c01)+FPR*(1-p[i])*c02)/(p[i]*c01+(1-p[i])*c02),4)\n",
    "        costs_norm.append(cost_norm)\n",
    "    return costs_norm\n",
    "costs_norm = calculate_cost_norm(p, c01, c02, FNR, FPR)\n",
    "costs_norm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:15:02.427839Z",
     "start_time": "2019-12-24T17:15:02.301700Z"
    },
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 画出图像\n",
    "import matplotlib as mpl\n",
    "import matplotlib.pyplot as plt\n",
    "def plot_lines(X, Y, color):\n",
    "    plt.plot(X, Y, color)\n",
    "    return\n",
    "plot_lines(Pcosts, costs_norm,'r')\n",
    "plot_lines(p, costs_norm, \"b:\")\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这里可以看出，如果直接使用p作为x轴，则图像为一条曲线\n",
    "\n",
    "而使用归一化的正例概率代价，则图像为一条直线\n",
    "\n",
    "显然线性关系更利于我们分析\n",
    "\n",
    "故之后我们都只讨论以正例概率代价为x轴的图像"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 多个theta"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:17:20.924517Z",
     "start_time": "2019-12-24T17:17:20.918534Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5]"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 生成theta\n",
    "thetas = list(range(12))\n",
    "thetas = [i+0.5 for i in thetas]\n",
    "thetas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:21:31.236780Z",
     "start_time": "2019-12-24T17:21:31.226774Z"
    }
   },
   "outputs": [],
   "source": [
    "# 定义计算每个theta对应的点的函数，并存在列表里\n",
    "def calculate_Pcost_cost_norm(thetas, output_score, y, calculate_Pcost, calculate_cost_norm):\n",
    "    Pcosts_n = []\n",
    "    costs_norm_n = []\n",
    "    theta_FPR_FNR = {}\n",
    "    for i in range(len(thetas)):\n",
    "        theta = thetas[i]\n",
    "        \n",
    "        # 计算输出结果\n",
    "        output_result = calculate_output_result(output_score,theta)\n",
    "        # print(output_result)\n",
    "\n",
    "        # 统计正例反例个数\n",
    "        m_positive, m_negative = calculate_m_positive_negative(y)\n",
    "        \n",
    "        # 计算混淆矩阵\n",
    "        con1, con2, con3, con4 = calculate_confusion(y,output_result)\n",
    "        # print(con1, con2, con3, con4)\n",
    "        \n",
    "        # 求 FNR FPR\n",
    "        FNR, FPR = calculate_FNR_FPR(con1,con2,con3,con4)\n",
    "        theta_FPR_FNR[theta]=[FNR, FPR]\n",
    "        \n",
    "        # 正概率代价\n",
    "        Pcosts  = calculate_Pcost(p, c01, c02)\n",
    "        Pcosts_n.append(Pcosts)\n",
    "        \n",
    "        # 归一化总概率\n",
    "        costs_norm = calculate_cost_norm(p, c01, c02, FNR, FPR)\n",
    "        costs_norm_n.append(costs_norm)\n",
    "        \n",
    "    return Pcosts_n, costs_norm_n, theta_FPR_FNR    "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:21:46.395290Z",
     "start_time": "2019-12-24T17:21:46.376831Z"
    }
   },
   "outputs": [],
   "source": [
    "# 调用函数计算每个theta对应的点\n",
    "Pcosts_n, costs_norm_n, theta_FPR_FNR  = calculate_Pcost_cost_norm(thetas, output_score,y, calculate_Pcost, calculate_cost_norm)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:22:16.610842Z",
     "start_time": "2019-12-24T17:22:16.469607Z"
    },
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in range(len(Pcosts_n)):\n",
    "    plot_lines(Pcosts_n[i], costs_norm_n[i],'r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:23:55.954636Z",
     "start_time": "2019-12-24T17:23:55.947654Z"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{0.5: [0.0, 0.8333],\n",
       " 1.5: [0.0, 0.6667],\n",
       " 2.5: [0.0, 0.5],\n",
       " 3.5: [0.0, 0.3333],\n",
       " 4.5: [0.1667, 0.3333],\n",
       " 5.5: [0.1667, 0.1667],\n",
       " 6.5: [0.3333, 0.1667],\n",
       " 7.5: [0.5, 0.1667],\n",
       " 8.5: [0.5, 0.0],\n",
       " 9.5: [0.6667, 0.0],\n",
       " 10.5: [0.8333, 0.0],\n",
       " 11.5: [1.0, 0.0]}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 查看theta与对应的FPR，FNR\n",
    "theta_FPR_FNR"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 为什么要归一化\n",
    "\n",
    "如果不归一化会怎么样"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:27:42.878479Z",
     "start_time": "2019-12-24T17:27:42.871503Z"
    }
   },
   "outputs": [],
   "source": [
    "# 重新定义计算函数\n",
    "\n",
    "# 正概率代价\n",
    "def calculate_Pcost_2(p, c01, c02):\n",
    "    Pcosts = []\n",
    "    for i in range(len(p)):\n",
    "        Pcost = round(p[i]*c01, 4)\n",
    "        Pcosts.append(Pcost)\n",
    "    return Pcosts\n",
    "\n",
    "# 归一化总概率\n",
    "def calculate_cost_norm_2(p, c01, c02, FNR, FPR):\n",
    "    costs_norm = []\n",
    "    for i in range(len(p)):\n",
    "        cost_norm = round(FNR*(p[i]*c01)+FPR*(1-p[i])*c02,4)\n",
    "        costs_norm.append(cost_norm)\n",
    "    return costs_norm"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:27:43.463104Z",
     "start_time": "2019-12-24T17:27:43.440513Z"
    }
   },
   "outputs": [],
   "source": [
    "# 调用函数计算每个theta对应的点\n",
    "Pcosts_n, costs_norm_n, theta_FPR_FNR  = calculate_Pcost_cost_norm(thetas, output_score,y, calculate_Pcost_2, calculate_cost_norm_2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "ExecuteTime": {
     "end_time": "2019-12-24T17:27:45.032770Z",
     "start_time": "2019-12-24T17:27:44.907089Z"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "for i in range(len(Pcosts_n)):\n",
    "    plot_lines(Pcosts_n[i], costs_norm_n[i],'r')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "其纵轴左边，右边，横轴单位不统一，受c01和c02的影响\n",
    "\n",
    "当c01，c02改变时，不方便比较"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.3"
  },
  "nbTranslate": {
   "displayLangs": [
    "*"
   ],
   "hotkey": "alt-t",
   "langInMainMenu": true,
   "sourceLang": "en",
   "targetLang": "fr",
   "useGoogleTranslate": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
